<?php

/**
 * Контроллер фронтенда. В соответствии с текущим пунктом структуры определяет
 * модуль, который должен обработать запрос, и делегирует управление ему.
 *
 */
class Kernel_Filter_FrontController_Clear extends Kernel_Filter_FrontController_Abstract 
{
    
    /**
    * Module option
    * 
    * @var integer
    */
    static private $_option;

	/**
    * Module name
    *
    * @var string
    */
    static private $_module;
    
    /**
    * Return module option
    * 
    * @return integer
    */
    static public function getOption() 
    {
        return self::$_option;
    }

	/**
    * Return module name
    *
    * @return integer
    */
    static public function getModule()
    {
        return self::$_module;
    }

    /**
     * Метод обработки пользовательского запроса.
     *
     */
    public function process() 
    {
        // для красивых URL’ов передаем в ответ приложения основной путь
        Application::getResponse()
            ->assign('SITE_ROOT', '')
            ->base($this->_base());

        // руками запускаем фильтр структуры
        parent::_forward(new Kernel_Filter_Structure);

        // здесь выполняется поиск и исполнение модуля, который соответствует
        // текущему урлу
        parent::process();
    }

    /**
     * Возвращает описание компонента, который обработает запрошенное действие,
     * полученное из запроса.
     *
     * @return  Kernel_Token
     */
    protected function _getFilterToken() 
    {
        $query = '
            SELECT 
                   `module`, 
                   `option`
              FROM 
                   `system_resource` 
             WHERE 
                   `id` = ' . (int)Kernel_Filter_Structure::getMenuId();
        list (self::$_module, self::$_option) = array_values(database::fetchRow($query));
        
        return new Kernel_Token(self::$_module);
    }

    /**
     * Возвращает основной путь страницы.
     *
     * @return  string
     */
    private function _base() 
    {
        return preg_replace('/^https?/',
            Application::getRequest()->secure() ? 'https' : 'http', BASE_PATH);
    }
    
}
